home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-20 / w9gr-dsp.zip / LMS.TMS < prev    next >
Text File  |  1992-08-22  |  12KB  |  595 lines

  1.     IDT     'LMS'
  2.     TITL    'LMS Algorithm AutoNotcher/DeNoiser'
  3.  
  4. * COPYRIGHT (c) 1992 BY DAVID L. HERSHBERGER, W9GR
  5. * ALL RIGHTS RESERVED
  6.  
  7. * NONCOMMERCIAL USE BY RADIO AMATEURS AND ELECTRONIC HOBBYISTS IS PERMITTED.
  8. * THIS IS NOT PUBLIC DOMAIN SOFTWARE.
  9. * THIS SOFTWARE MAY NOT BE USED WITHOUT A LICENSE AS THE BASIS
  10. * FOR MANUFACTURE OF COMMERCIAL PRODUCTS.
  11. * COMMERCIAL USE OF THIS SOFTWARE REQUIRES A LICENSE.
  12. * LICENSING INQUIRIES MAY BE DIRECTED TO:
  13. *      QUANTICS
  14. *      P. O. BOX 2163
  15. *      NEVADA CITY, CALIFORNIA  95959-2163
  16.  
  17. * THIS TMS320C10 ASSEMBLY LANGUAGE PROGRAM IS WRITTEN FOR THE
  18. * W9GR QUANTICS DIGITAL SIGNAL PROCESSOR DESCRIBED ON PAGE 43 OF
  19. * THE SEPTEMBER 1992 ISSUE OF QST MAGAZINE.
  20. * ("LOW COST DIGITAL SIGNAL PROCESSING FOR THE RADIO AMATEUR"
  21. * BY DAVE HERSHBERGER, W9GR)
  22. * FURTHER INFORMATION ON THE LMS ALGORITHM AS IMPLEMENTED HERE IS
  23. * GIVEN IN THE ARTICLE "USING THE LMS ALGORITHM FOR QRM AND QRN
  24. * REDUCTION" BY DR. STEVEN E. REYER, WA9VNJ, AND DAVID L. HERSHBERGER, W9GR,
  25. * IN THE SEPTEMBER 1992 ISSUE OF QEX MAGAZINE.
  26.  
  27. * THE W9GR / QUANTICS DIGITAL SIGNAL PROCESSOR IS AVAILABLE IN KIT FORM
  28. * (INCLUDING ALL PC BOARD MOUNTED COMPONENTS BUT NO ENCLOSURE OR POWER SUPPLY)
  29. * FROM:
  30. *      QUANTICS
  31. *      P. O. BOX 2163
  32. *      NEVADA CITY, CALIFORNIA  95959
  33.  
  34. * Filter length = 24 Delay length = 65
  35. * Both notcher and denoiser functions, selected by BIO switch
  36. * LMS coefficients are decayed one at a time per program loop
  37. * Each loop uses 301 instruction cycles
  38. * FS = 5 MHZ / 301 = 16611 HZ
  39.  
  40. * BIO=1 > AUTOMATIC NOTCH
  41. * BIO=0 > DENOISING FUNCTION
  42.  
  43.     DSEG
  44.  
  45.     DORG    >00     PAGE 0
  46.  
  47. NBETA   BSS     1       BETA VALUE (NOTCH)
  48. NDECAY  BSS     1       DECAY VALUE (NOTCH) (>8000 => NO DECAY)
  49. CBETA   BSS     1       BETA VALUE (DENOISE)
  50. CDECAY  BSS     1       DECAY VALUE (DENOISE) (>8000 => NO DECAY)
  51. ONES    BSS     1       ALL ONES FOR EX-OR
  52.  
  53. * END OF PAGE 0 TABLE READ VARIABLES
  54.  
  55. D       BSS     65      INPUT SIGNAL DELAY (NOTCH)
  56. X       BSS     24      FILTER DELAY (NOTCH)
  57. W       BSS     24      LMS COEFFICIENTS
  58. BETA    BSS     1       BETA VALUE (NOTCH)
  59. DECAY   BSS     1       DECAY VALUE (>8000 => NO DECAY)
  60. ONE     BSS     1       CONSTANT 1
  61. Y       BSS     1       WIENER FIR FILTER OUTPUT
  62. E       BSS     1       ERROR SIGNAL
  63. EBETA   BSS     1       E*BETA
  64. SQUARE  BSS     1       INPUT SQUARED
  65. LED     BSS     1       LED DISPLAY
  66. TEMP    BSS     1       TEMPORARY STORAGE
  67. HPFOUT  BSS     1       HPF OUTPUT
  68.  
  69.     DORG    >80     PAGE 1
  70.  
  71. HPF     BSS     5       HPF NETWORK COEFFICIENTS
  72. MASK    BSS     1       A/D, D/A 2'S COMPLEMENT CONVERSION MASK
  73. LSBMAX  BSS     1       8 BIT MASK
  74. ONE1    BSS     1       CONSTANT 1
  75.  
  76. * END OF PAGE 1 TABLE READ VARIABLES
  77.  
  78. INP     BSS     3       INPUT DELAY, USED FOR HPF
  79. DENOM   BSS     2       INPUT HPF DENOMINATOR DELAY
  80.  
  81. TOP     EQU     >8F
  82. NFIR    EQU     24      LENGTH OF WIENER FIR FILTER
  83. NDEL    EQU     65      LONG DELAY FOR NOTCHER
  84. SDEL    EQU     1       SHORT DELAY FOR DENOISER MODE
  85.  
  86.     DEND
  87.  
  88.     PSEG
  89.  
  90.     B       START
  91. INTRPT  B       START
  92. START   DINT
  93.     SOVM
  94.     LDPK    0
  95.     LARP    AR0
  96.  
  97. * ZERO ALL DATA MEMORY LOCATIONS
  98.  
  99.     ZAC
  100.     LARK    AR0,TOP
  101. CLEAR   SACL    *,0
  102.     BANZ    CLEAR
  103.  
  104. * STORE AWAY "1" VALUE
  105.  
  106.     LACK    1
  107.     SACL    ONE
  108.  
  109. * GET READY FOR TABLE READ, PAGE 0
  110.  
  111.     LARK    AR0,ONES        ONES: LAST TABLE ENTRY
  112.     LT      ONE
  113.     MPYK    TBLEND
  114.     PAC
  115.     LARP    AR0
  116.  
  117. * MOVE CONSTANTS TO DATA MEMORY, PAGE 0
  118.  
  119. MOVTBL  TBLR    *
  120.     SUB     ONE
  121.     BANZ    MOVTBL
  122.  
  123. * GET READY FOR TABLE READ, PAGE 1
  124.  
  125.     LARK    AR1,ONE1     ONE1: LAST TABLE ENTRY
  126.     LARK    AR0,TBLEND1-TABLE1
  127.     LT      ONE
  128.     MPYK    TBLEND1
  129.     PAC
  130.  
  131. * MOVE CONSTANTS TO DATA MEMORY, PAGE 1
  132.  
  133.     LARP    AR1
  134. MOVTBL1 LDPK    1
  135.     LARP    AR1
  136.     TBLR    *-,AR0
  137.     LDPK    0
  138.     SUB     ONE
  139.     BANZ    MOVTBL1
  140.  
  141.     LARP    AR0
  142.     LDPK    0
  143.  
  144.     LARP    AR0
  145.     LARK    AR0,NDEL-1
  146.     LARK    AR1,NFIR-1
  147.  
  148. * MAIN PROGRAM LOOP
  149.  
  150. AGAIN   LDPK    1
  151.     IN      INP,PA1         INPUT SAMPLE FROM A/D
  152.     OUT     ONE1,PA0        START NEXT CONVERSION
  153.  
  154.     ZALS    INP             PUT SAMPLE INTO ACC-L
  155.     XOR     MASK            A/D OFFSET BINARY=>2'S COMP
  156.     AND     LSBMAX          CLEAR ALL LOW ORDER BITS (NOISE)
  157.     SACL    INP             PUT BACK
  158.  
  159. * INPUT HIGHPASS FILTER:
  160.  
  161. *       NUMERATOR:
  162.  
  163.     ZAC
  164.     LT      INP+2
  165.     MPY     HPF+2
  166.     LTD     INP+1
  167.     MPY     HPF+1
  168.     LTD     INP
  169.     MPY     HPF
  170.  
  171. *       DENOMINATOR:
  172.  
  173.     LTA     DENOM+1
  174.     MPY     HPF+4
  175.     LTD     DENOM
  176.     MPY     HPF+3
  177.     APAC
  178.  
  179.     ADD     ONE1,11         ADD 0.5 TO ROUND
  180.     SACH    DENOM,4         SAVE WITH SHIFT
  181.     LDPK    0
  182.     SACH    HPFOUT,4        STORE ON PAGE 0 TOO
  183.  
  184.     SAR     AR0,TEMP        STORE AR0
  185.     LACK    D               LOAD ACCUM WITH OFFSET
  186.     ADD     TEMP            ADD AR0 VALUE
  187.     SACL    LED             STORE USING LED AS TEMP LOCATION
  188.     LAR     AR0,LED         PUT INTO AR0
  189.     ZALH    HPFOUT          LOAD ACCUM WITH HPF OUTPUT
  190.     SACH    *,0             SAVE HPF OUTPUT IN DELAY
  191.     LAR     AR0,TEMP        RESTORE AR0
  192.  
  193. * DECAY JUST ONE LMS COEFFICIENT (NOTCH)
  194. * USE AR1 TO POINT TO COEFFICIENT TO BE DECAYED
  195. * TEMPORARILY ADD W TO AR0 CONTENTS THEN RESTORE
  196.  
  197.     LARP    AR1             USE AR1
  198.     SAR     AR1,TEMP        STORE AR1
  199.     LACK    W               LOAD ACCUM WITH OFFSET
  200.     ADD     TEMP            ADD AR1 VALUE
  201.     SACL    LED             STORE USING LED AS TEMP LOCATION
  202.     LAR     AR1,LED         PUT INTO AR1
  203.     LT      DECAY
  204.     MPY     *               MULTIPLY
  205.     PAC
  206.     SACH    *,1             PUT BACK
  207.     LAR     AR1,TEMP        RESTORE AR1
  208.     BANZ    ARDECAY
  209.     LARK    AR1,NFIR-1
  210.     B       BARGRA
  211. ARDECAY NOP                     NOPS TO MAINTAIN SAMPLING RATE
  212.     NOP
  213.     NOP
  214.  
  215. * SQUARE INPUT FOR LED DISPLAY, 3DB/SEGMENT
  216.  
  217. BARGRA  ZALH    HPFOUT
  218.     SACH    TEMP
  219.     LT      TEMP
  220.     MPY     TEMP
  221.     PAC
  222.     SACH    TEMP
  223.     SUBH    SQUARE
  224.     BGZ     PEAK
  225.     ZALH    SQUARE
  226.     SUBH    ONE
  227.     ABS
  228.     SACH    SQUARE
  229.     B       DISPLAY
  230.  
  231. PEAK    ZALH    TEMP
  232.     SACH    SQUARE
  233.     NOP                     NOPS TO MAINTAIN SAMPLING RATE
  234.     NOP
  235.     NOP
  236.     NOP
  237.  
  238. * CONVERT TO DISPLAY BY BITWISE OR
  239.  
  240. DISPLAY LAC     SQUARE,12
  241.     SACH    LED
  242.  
  243.     LAC     SQUARE,11
  244.     SACH    TEMP
  245.     ZALS    TEMP
  246.     OR      LED
  247.     SACL    LED
  248.  
  249.     LAC     SQUARE,10
  250.     SACH    TEMP
  251.     ZALS    TEMP
  252.     OR      LED
  253.     SACL    LED
  254.  
  255.     LAC     SQUARE,9
  256.     SACH    TEMP
  257.     ZALS    TEMP
  258.     OR      LED
  259.     SACL    LED
  260.  
  261.     LAC     SQUARE,8
  262.     SACH    TEMP
  263.     ZALS    TEMP
  264.     OR      LED
  265.     SACL    LED
  266.  
  267.     LAC     SQUARE,7
  268.     SACH    TEMP
  269.     ZALS    TEMP
  270.     OR      LED
  271.     SACL    LED
  272.  
  273.     LAC     SQUARE,6
  274.     SACH    TEMP
  275.     ZALS    TEMP
  276.     OR      LED
  277.     SACL    LED
  278.  
  279.     LAC     SQUARE,5
  280.     SACH    TEMP
  281.     ZALS    TEMP
  282.     OR      LED
  283.     SACL    LED
  284.  
  285.     LAC     SQUARE,4
  286.     SACH    TEMP
  287.     ZALS    TEMP
  288.     OR      LED
  289.     SACL    LED
  290.  
  291.     LAC     SQUARE,3
  292.     SACH    TEMP
  293.     ZALS    TEMP
  294.     OR      LED
  295.  
  296.     XOR     ONES
  297.     SACL    LED
  298.  
  299.     OUT     LED,PA2
  300.  
  301. * DATA DELAY MOVE
  302.  
  303.     LARP    AR0
  304.     BANZ    WRAP
  305.     BIOZ    DENAR0          TEST FOR NOTCH OR DENOISE
  306.     LARK    AR0,NDEL-1      LOAD AR0 FOR LONG (AUTONOTCH) DELAY
  307.     B       TWEAK
  308. DENAR0  LARK    AR0,SDEL-1      LOAD AR0 FOR SHORT (DENOISER) DELAY
  309.     B       TWEAK
  310. WRAP    NOP                     NOPS TO MAINTAIN SAMPLING RATE
  311.     NOP
  312.     NOP
  313.     NOP
  314.     NOP
  315.  
  316. * TWEAK NOTCH COEFFICIENTS, BEFORE DOING FILTERING/DATA MOVE:
  317.  
  318. TWEAK   LT      EBETA
  319.  
  320.     MPY     X+23
  321.     PAC
  322.     ADDH    W+23
  323.     SACH    W+23
  324.  
  325.     MPY     X+22
  326.     PAC
  327.     ADDH    W+22
  328.     SACH    W+22
  329.  
  330.     MPY     X+21
  331.     PAC
  332.     ADDH    W+21
  333.     SACH    W+21
  334.  
  335.     MPY     X+20
  336.     PAC
  337.     ADDH    W+20
  338.     SACH    W+20
  339.  
  340.     MPY     X+19
  341.     PAC
  342.     ADDH    W+19
  343.     SACH    W+19
  344.  
  345.     MPY     X+18
  346.     PAC
  347.     ADDH    W+18
  348.     SACH    W+18
  349.  
  350.     MPY     X+17
  351.     PAC
  352.     ADDH    W+17
  353.     SACH    W+17
  354.  
  355.     MPY     X+16
  356.     PAC
  357.     ADDH    W+16
  358.     SACH    W+16
  359.  
  360.     MPY     X+15
  361.     PAC
  362.     ADDH    W+15
  363.     SACH    W+15
  364.  
  365.     MPY     X+14
  366.     PAC
  367.     ADDH    W+14
  368.     SACH    W+14
  369.  
  370.     MPY     X+13
  371.     PAC
  372.     ADDH    W+13
  373.     SACH    W+13
  374.  
  375.     MPY     X+12
  376.     PAC
  377.     ADDH    W+12
  378.     SACH    W+12
  379.  
  380.     MPY     X+11
  381.     PAC
  382.     ADDH    W+11
  383.     SACH    W+11
  384.  
  385.     MPY     X+10
  386.     PAC
  387.     ADDH    W+10
  388.     SACH    W+10
  389.  
  390.     MPY     X+9
  391.     PAC
  392.     ADDH    W+9
  393.     SACH    W+9
  394.  
  395.     MPY     X+8
  396.     PAC
  397.     ADDH    W+8
  398.     SACH    W+8
  399.  
  400.     MPY     X+7
  401.     PAC
  402.     ADDH    W+7
  403.     SACH    W+7
  404.  
  405.     MPY     X+6
  406.     PAC
  407.     ADDH    W+6
  408.     SACH    W+6
  409.  
  410.     MPY     X+5
  411.     PAC
  412.     ADDH    W+5
  413.     SACH    W+5
  414.  
  415.     MPY     X+4
  416.     PAC
  417.     ADDH    W+4
  418.     SACH    W+4
  419.  
  420.     MPY     X+3
  421.     PAC
  422.     ADDH    W+3
  423.     SACH    W+3
  424.  
  425.     MPY     X+2
  426.     PAC
  427.     ADDH    W+2
  428.     SACH    W+2
  429.  
  430.     MPY     X+1
  431.     PAC
  432.     ADDH    W+1
  433.     SACH    W+1
  434.  
  435.     MPY     X
  436.     PAC
  437.     ADDH    W
  438.     SACH    W
  439.  
  440. * NOTCHER/DENOISER FIR WIENER FILTER:
  441.  
  442.     ZAC
  443.     LT      X+23
  444.     MPY     W+23
  445.     LTD     X+22
  446.     MPY     W+22
  447.     LTD     X+21
  448.     MPY     W+21
  449.     LTD     X+20
  450.     MPY     W+20
  451.     LTD     X+19
  452.     MPY     W+19
  453.     LTD     X+18
  454.     MPY     W+18
  455.     LTD     X+17
  456.     MPY     W+17
  457.     LTD     X+16
  458.     MPY     W+16
  459.     LTD     X+15
  460.     MPY     W+15
  461.     LTD     X+14
  462.     MPY     W+14
  463.     LTD     X+13
  464.     MPY     W+13
  465.     LTD     X+12
  466.     MPY     W+12
  467.     LTD     X+11
  468.     MPY     W+11
  469.     LTD     X+10
  470.     MPY     W+10
  471.     LTD     X+9
  472.     MPY     W+9
  473.     LTD     X+8
  474.     MPY     W+8
  475.     LTD     X+7
  476.     MPY     W+7
  477.     LTD     X+6
  478.     MPY     W+6
  479.     LTD     X+5
  480.     MPY     W+5
  481.     LTD     X+4
  482.     MPY     W+4
  483.     LTD     X+3
  484.     MPY     W+3
  485.     LTD     X+2
  486.     MPY     W+2
  487.     LTD     X+1
  488.     MPY     W+1
  489.     LTD     X
  490.     MPY     W
  491.     APAC
  492.     ADD     ONE,15          ADD 0.5 TO ROUND
  493.     SACH    Y,0
  494.  
  495. * E = D - Y
  496.  
  497.     ZALH    HPFOUT
  498.     SUBH    Y
  499.     SACH    E
  500.  
  501.     LT      E
  502.     MPY     BETA
  503.     PAC
  504.     SACH    EBETA
  505.  
  506. * TAKE DATA FROM DELAY LINE AND PUT IT IN FIR FILTER
  507.  
  508.     SAR     AR0,TEMP        STORE AR0
  509.     LACK    D               LOAD ACCUM WITH OFFSET
  510.     ADD     TEMP            ADD AR0 VALUE
  511.     SACL    LED             STORE USING LED AS TEMP LOCATION
  512.     LAR     AR0,LED         PUT INTO AR0
  513.     ZALH    *
  514.     SACH    X
  515.     LAR     AR0,TEMP        RESTORE AR0
  516.  
  517.     BIOZ    DENOISE         TEST FOR NOTCH OR DENOISE
  518.  
  519. * OUTPUT NOTCHED SIGNAL TO DAC
  520.     
  521.     ZALS    E               NOTCHED OUTPUT SIGNAL
  522.     LDPK    1
  523.     XOR     MASK            2'S COMP=>OFFSET BINARY
  524.     LDPK    0
  525.     SACL    TEMP            SAVE IT
  526.     OUT     TEMP,PA1        TO D/A CONV
  527.  
  528. * LOAD NOTCH VALUES FOR DECAY AND BETA
  529.  
  530.     ZALH    NDECAY
  531.     SACH    DECAY
  532.     ZALH    NBETA
  533.     SACH    BETA
  534.  
  535.     B AGAIN
  536.  
  537. * OUTPUT DENOISED SIGNAL TO DAC
  538.  
  539. DENOISE ZALS    Y               CORRELATOR (DENOISED)
  540.     LDPK    1
  541.     XOR     MASK            2'S COMP=>OFFSET BINARY
  542.     LDPK    0
  543.     SACL    TEMP            SAVE IT
  544.     OUT     TEMP,PA1        TO D/A CONV
  545.  
  546. * LOAD DENOISE VALUES FOR DECAY AND BETA
  547.     
  548.     ZALH    CDECAY
  549.     SACH    DECAY
  550.     ZALH    CBETA
  551.     SACH    BETA
  552.  
  553.     B AGAIN
  554.  
  555.  
  556. TABLE   DATA    >1000           NOTCHER BETA VALUE
  557.     DATA    >7FE4           NOTCHER DECAY VALUE (>8000 => NO DECAY)
  558.     DATA    >1800           DENOISE BETA VALUE
  559.     DATA    >7D80           DENOISE DECAY VALUE (>8000 => NO DECAY)
  560. TBLEND  DATA    ?1111111111111111       ONES
  561.  
  562. * 0.5 DB/40 DB ELLIPTIC IIR HPF
  563. * PASS 300 HZ REJ 35 HZ
  564. * HPF COEFFICIENTS:
  565. TABLE1  DATA    3644,-7288,3644,7700,-3644
  566.     DATA    ?1000000000000000   A/D, D/A 2'S COMPLEMENT CONVERSION MASK
  567.     DATA    ?1111111100000000   A/D 8 BIT MASK
  568. TBLEND1 DATA    ?0000000000000001   CONSTANT ONE
  569.  
  570. * COPYRIGHT NOTICE
  571.  
  572. * ASCII DATA STRING EMBEDDED IN THE FOLLOWING DATA STATEMENTS:
  573. * Copyright (c) 1992 by David L. Hershberger W9GR,
  574. * DBA Quantics, P. O. Box 2163, Nevada City, CA 95959-2163.
  575. * All rights reserved.
  576.     DATA    >4343,>6F6F,>7070,>7979,>7272,>6969,>6767,>6868
  577.     DATA    >7474,>2020,>2828,>6363,>2929,>2020,>3131,>3939
  578.     DATA    >3939,>3232,>2020,>6262,>7979,>2020,>4444,>6161
  579.     DATA    >7676,>6969,>6464,>2020,>4C4C,>2E2E,>2020,>4848
  580.     DATA    >6565,>7272,>7373,>6868,>6262,>6565,>7272,>6767
  581.     DATA    >6565,>7272,>2020,>5757,>3939,>4747,>5252,>2C2C
  582.     DATA    >2020,>4444,>4242,>4141,>2020,>5151,>7575,>6161
  583.     DATA    >6E6E,>7474,>6969,>6363,>7373,>2C2C,>2020,>5050
  584.     DATA    >2E2E,>2020,>4F4F,>2E2E,>2020,>4242,>6F6F,>7878
  585.     DATA    >2020,>3232,>3131,>3636,>3333,>2C2C,>2020,>4E4E
  586.     DATA    >6565,>7676,>6161,>6464,>6161,>2020,>4343,>6969
  587.     DATA    >7474,>7979,>2C2C,>2020,>4343,>4141,>2020,>3939
  588.     DATA    >3535,>3939,>3535,>3939,>2D2D,>3232,>3131,>3636
  589.     DATA    >3333,>2E2E,>2020,>4141,>6C6C,>6C6C,>2020,>7272
  590.     DATA    >6969,>6767,>6868,>7474,>7373,>2020,>7272,>6565
  591.     DATA    >7373,>6565,>7272,>7676,>6565,>6464,>2E2E
  592.  
  593.     DEND
  594.     END
  595.